#define _CRT_SECURE_NO_WARNINGS 1


//#include<map>
//#include<vector>
//#include<iostream>
//
//using namespace std;
//
//int findMaxLength(vector<int>& nums)
//{
//    map<int, int> hash;
//    hash[0] = -1;
//    int sum = 0, Max = 0, size = nums.size();
//    for (int i = 0; i < size; i++)
//    {
//        sum += nums[i] == 0 ? -1 : 1;
//        if (hash.count(sum))
//        {
//            Max = max(Max, i - hash[sum]);
//        }
//        else
//        {
//            hash[sum] = i;
//        }
//    }
//    return Max;
//}
//
//int main()
//{
//    vector<int> v = { 0,1,1,1,1,1,0,0,0 };
//    cout << findMaxLength(v) << endl;
//
//    return 0;
//}


//#include<vector>
//#include<iostream>
//
//using namespace std;
//
//vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k)
//{
//    int row = mat.size(), col = mat[0].size();
//    vector<vector<int>> v(row, vector<int>(col));
//    vector<vector<int>> dp(row + 1, vector<int>(col + 1));
//    for (int i = 1; i <= row; i++)
//    {
//        for (int j = 1; j <= col; j++)
//        {
//            dp[i][j] = dp[i][j - 1] + dp[i - 1][j] - dp[i - 1][j - 1] + mat[i - 1][j - 1];
//        }
//    }
//    for (int i = 0; i < row; i++)
//    {
//        for (int j = 0; j < col; j++)
//        {
//            int x1 = max(0, i - k) + 1;
//            int y1 = max(0, j - k) + 1;
//            int x2 = min(row - 1, i + k) + 1;
//            int y2 = min(col - 1, j + k) + 1;
//            v[i][j] = dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1];
//        }
//    }
//    return v;
//}
//
//int main()
//{
//    vector<vector<int>> v = { { 67,64,78 }, { 99,98,38 }, { 82,46,46 } ,{ 6,52,55 }, { 55,99,45 } };
//    vector<vector<int>> ret = matrixBlockSum(v, 3);
//    for (int i = 0; i < ret.size(); i++)
//    {
//        for (int j = 0; j < ret[i].size(); j++)
//        {
//            cout << ret[i][j] << ' ';
//        }
//        cout << endl;
//    }
//
//    return 0;
//}


#include<iostream>

using namespace std;

int getSum(int a, int b)
{
    while ((a & b) << 1 != 0)
    {
        int x = a ^ b;
        int y = (a & b) << 1;
        a = x;
        b = y;
    }
    return a ^ b;
}

int main()
{
    cout << getSum(13, 28) << endl;

    return 0;
}